iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0

呈上篇,這篇我們可以先以Class Diagram類別圖為例

Class Diagram類別圖,靜態地描述一個系統的結構。換句話說,它呈現了系統中包含了哪些「類別 (Classes)」、每個類別擁有哪些「屬性 (Attributes)」和「方法 (Methods)」,以及這些類別之間如何互相連結與互動的「關係 (Relationships)」。

您可以把它想像成一張系統的藍圖或組織架構圖。就像建築藍圖呈現了建築物的房間、樑柱和它們之間的關係一樣,類別圖描繪了軟體系統的組成單位和它們的結構關係。

  1. 類別 (Class)
    類別是系統中最基本的組成單位,代表著一群具有相同特性和行為的物件的抽象概念。在圖表中,它通常被表示為一個有三個分區的矩形框。

名稱 (Name): 位於最上方的分區,用來識別這個類別是什麼。例如:汽車、訂單、使用者。

屬性 (Attributes): 位於中間的分區,又稱為「成員變數 (Member Variables)」。它描述了這個類別所擁有的靜態特徵或資料。例如,汽車類別可能會有顏色、品牌、型號等屬性。

方法 (Methods): 位於最下方的分區,又稱為「成員函式 (Member Functions)」。它描述了這個類別能夠執行的操作或行為。例如,汽車類別可能會有啟動()、剎車()、加速()等方法。

┌─────────────────────────────────┐
│ 汽車 (Car)
├─────────────────────────────────┤
│ - 顏色 (color): String
│ - 品牌 (brand): String
│ - 型號 (model): String
├─────────────────────────────────┤
│ + 啟動 (start()): void
│ + 剎車 (brake()): void
│ + 加速 (accelerate()): void
└─────────────────────────────────┘
符號說明:
-(減號) 代表 private (私有的),表示只有該類別內部可以存取。
+(加號) 代表 public (公開的),表示任何地方都可以存取。
#(井號) 代表 protected (受保護的),表示該類別及其子類別可以存取。

  1. 關係 (Relationships)
======================================================================
==                  UML 類別圖關係 (Relationships)                  ==
======================================================================

---
### 1. 繼承 (Inheritance / Generalization)
- **概念:** 「是一種 (is-a)」的關係。一個子類別繼承了父類別的所有屬性和方法。
- **符號:** 一條帶有空心三角形箭頭的實線,箭頭指向父類別。
- **範例:** 跑車 是一種 汽車。

    [ 子類別 ]                 [ 父類別 ]
    [  跑車  ]  ────────────▷  [  汽車  ]


---
### 2. 關聯 (Association)
- **概念:** 兩個類別之間有結構上的連結,但彼此是獨立的個體。
- **符號:** 一條實線。可標示「多重性 (Multiplicity)」。
- **範例:** 一個司機 駕駛 一輛汽車。

    [ 類別A ]                 [ 類別B ]
    [  司機  ]  ─────────────  [  汽車  ]

    (含多重性標示)
    [  司機  ] 1 ─────────── 1 [  汽車  ]


---
### 3. 聚合 (Aggregation)
- **概念:** 「有一個 (has-a)」的關係,是一種較弱的「整體與部分」關係,部分可以獨立於整體存在。
- **符號:** 一條帶有空心菱形的實線,菱形端連接到「整體」類別。
- **範例:** 一個汽車 有一個 引擎。

    [  部分  ]                 [  整體  ]
    [  引擎  ]  ◇───────────  [  汽車  ]


---
### 4. 組合 (Composition)
- **概念:** 「包含 (contains-a)」的關係,是一種更強的「整體與部分」關係,部分的生命週期依附於整體。
- **符號:** 一條帶有實心菱形的實線,菱形端連接到「整體」類別。
- **範例:** 一間房子 包含 數個房間。

    [  部分  ]                 [  整體  ]
    [  房間  ]  ◆───────────  [  房子  ]


---
### 5. 依賴 (Dependency)
- **概念:** 一個類別的操作需要使用到另一個類別,是一種臨時性的、較弱的關係。
- **符號:** 一條帶有箭頭的虛線,箭頭指向被依賴的類別。
- **範例:** 司機在開車()方法中,需要使用到地圖物件。

    [ 使用者類別 ]             [ 被依賴類別 ]
    [    司機    ]  - - - - - >  [    地圖    ]

以Class Diagram類別圖為例,下面是常用的3種繪畫type
(源頭取自HLD:IT鐵人DAY 7-Class Diagram類別圖)(如果有想要進修UML更深可以看他們的鐵人文章)

特性 Class (一般類別) Abstract Class (抽象類別) Interface (介面)
本質 完整的藍圖 半成品的藍圖 純粹的能力合約
方法內容 全部都有實作 可包含已實作和未實作的方法 全部都沒有實作 (只有宣告)
用途 直接創造物件 作為多個子類別的「共同樣板」 定義一個物件對外應提供的「能力規格」
繼承關係 extends (繼承) extends (繼承) implements (實作)
多重性 只能繼承一個父類別 只能繼承一個父類別 可以實作多個介面

下面是符號詳細介紹

UML 類別圖 (Class Diagram) 符號詳解

類別圖用來描述系統的「靜態結構」,也就是系統由哪些「東西」組成,以及它們之間的靜態關係。可以把它想像成建築的結構藍圖。

名稱 說明與使用情境
類別 (Class) 核心元素。用來表示系統中的一個物件藍圖。它包含三個部分:1. 頂部:類別名稱 (ClassName)2. 中間:屬性 (Attributes)3. 底部:操作 (Operations / Methods)範例Member (會員)、Product (產品)、Order (訂單)。
介面 (Interface) 一種特殊的類別,只定義「應該有什麼功能 (操作)」,但不實作這些功能。它像一份合約,實作它的類別就必須遵守合約,提供所有定義好的功能。範例:一個Printable介面,規定所有實作它的類別都必須有print()功能。
套件 (Package) 像資料夾一樣,用來將相關的類別或其他元素組織在一起,避免命名衝突並讓系統結構更有條理。範例:將所有與使用者帳號相關的類別放入com.example.user套件中。
關聯 (Association) 表示兩個類別之間有某種「結構上的連結」。這是一條實線,表示一個類別的物件會需要另一個類別的物件來完成工作。範例Member (會員) 和 Order (訂單) 之間有關聯,因為會員會產生訂單。
泛化 / 繼承 (Generalization / Inheritance) 表示「is-a」的關係,也就是繼承。空心箭頭指向父類別 (基礎類別),另一端是子類別 (衍生類別)。子類別會繼承父類別的屬性和操作。範例Dog (狗) 和 Cat (貓) 都繼承自 Animal (動物)。箭頭從Dog指向Animal
聚合 (Aggregation) 表示「has-a」的關係,是一種弱擁有關係。整體 (Whole) 由部分 (Part) 組成,但部分的生命週期獨立於整體。用空心菱形指向整體。範例Department (部門) 和 Employee (員工)。部門解散了,員工依然存在。菱形在Department端。
組合 / 複合 (Composition) 表示「contains-a」的關係,是一種強擁有關係。部分的生命週期完全依賴於整體,整體消失了,部分也會跟著消失。用實心菱形指向整體。範例Car (車子) 和 Engine (引擎)。車子報廢了,引擎也跟著報廢。菱形在Car端。
依賴 (Dependency) 表示一個類別「uses-a」另一個類別。這是一種臨時性的、較弱的關係,通常發生在一個類別的方法參數、回傳值或局部變數中使用了另一個類別。範例Driver (司機) 的drive方法需要一個Car物件作為參數 (drive(car: Car)),那麼Driver就依賴於Car
數量 (Multiplicity) 標示在關聯線的兩端,用來表示一個類別的實例可以對應到多少個另一個類別的實例。• 1:正好一個• 0..1:零個或一個• *0..*:零個或多個• 1..*:一個或多個範例Member "1" -- "0..*" Order (一個會員可以有零或多筆訂單)。

UML 活動圖 (Activity Diagram) 符號詳解

活動圖用來描述系統的「動態行為」,也就是完成一件事情的「步驟流程」或「工作流程」。它很像我們傳統上畫的流程圖。

名稱 說明與使用情境
初始狀態 (Initial State) 表示活動流程的「起點」。一個活動圖只會有一個初始狀態。它是一個實心圓點。
活動 (Activity) / 動作 (Action) 表示流程中的一個「步驟」或需要執行的工作。用圓角矩形表示。範例使用者登入驗證密碼查詢資料庫
決策 (Decision) 表示流程中的一個「判斷點」,通常會有一個入口和多個出口,每個出口對應一個判斷條件 (例如 [Yes] / [No])。用菱形表示。範例:判斷「密碼是否正確?」。
控制流 (Control Flow) 表示流程進行的「方向」。用實線箭頭連接各個活動和決策點,指出下一步該做什麼。
分岔 (Fork) / 結合 (Join) 黑色實心長條。用來表示「同步」或「併發」流程。• 分岔:一個入口,多個出口。表示流程在此同時開始執行多個並行任務。• 結合:多個入口,一個出口。表示必須等待所有並行任務都完成後,流程才能繼續往下走。
物件流 (Object Flow) 帶有箭頭的虛線,表示物件或資料在不同活動之間傳遞。範例查詢訂單活動產出一個Order物件,並將它傳遞給顯示訂單詳情活動。
物件狀態 (Object in State) 在活動圖中顯示一個物件在特定時間點的狀態。範例:一個Order物件,其狀態可能是[待付款][已出貨]
結束狀態 (Final State) 表示活動流程的「終點」。一個活動圖可以有多個結束狀態。它是一個帶有外圈的實心圓點。
參與者 (Actor) 在活動圖中,有時會用泳道 (Swimlane) 來區分不同角色 (Actor) 或部門所負責的活動。這個火柴人符號在「使用案例圖」中更為常見,代表與系統互動的人或外部系統。

有了上面這些符號與概念之後,我們就可以繪畫一個簡單的Class Diagram來與其他工程師甚至客戶溝通
下一章我就拿一個簡單的BANK系統來介紹CLASS在實際上如何發揮作用


上一篇
Day4- UML畫法
系列文
一條龍的軟體開發到維護,從校園工讀到職場工程師5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言